About the Data

From the EPA: “The National Walkability Index is a nationwide geographic data resource that ranks block groups according to their relative walkability. The national dataset includes walkability scores for all block groups as well as the underlying attributes that are used to rank the block groups.”

National Walkability Index

The Walkability Index is based on measures of the built environment derived from EPA’s Smart Location Database. The Index is calculated as a function of block rankings on a series of indicators:

\[ Walkability \space Index = \left(\frac{w}{3}\right) + \left(\frac{x}{3}\right) + \left(\frac{y}{3}\right) + \left(\frac{z}{6}\right)\]

Where

  • \(w\) = block group’s ranked score for intersection density
  • \(x\) = block group’s ranked score for proximity to transit stops
  • \(y\) = block group’s ranked score for employment mix
  • \(z\) = block group’s ranked score for employment and household mix

For more, see the EPA’s “National Walkability Index Methodology and User Guide”.

Variable Description

glimpse(walk)
## Rows: 46
## Columns: 16
## $ FIPS_TRACT           <dbl> 51001990100, 51001090800, 51001090400, 5100109040…
## $ FIPS_BLKGP           <chr> "510019901000", "510010908002", "510010904004", "…
## $ STATEFP              <dbl> 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5…
## $ COUNTYFP             <chr> "001", "001", "001", "001", "001", "001", "001", …
## $ TRACTCE              <chr> "990100", "090800", "090400", "090400", "090800",…
## $ BLKGRPCE             <dbl> 0, 2, 4, 3, 3, 1, 2, 1, 4, 5, 1, 2, 0, 2, 1, 1, 4…
## $ intersection_density <dbl> 0.0000000, 2.4864088, 3.9452629, 3.0767453, 5.021…
## $ proximity_transit    <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ employment_mix       <dbl> 0.00000000, 0.44002127, 0.53269345, 0.65081622, 0…
## $ emp_housing_mix      <dbl> 0.0000000, 0.3020474, 0.6212746, 0.2365151, 0.866…
## $ emp_hou_mix_rank     <dbl> 1, 5, 14, 4, 20, 7, 6, 1, 9, 6, 2, 11, 1, 11, 11,…
## $ emp_mix_rank         <dbl> 1, 6, 9, 14, 17, 6, 11, 1, 14, 13, 2, 17, 1, 7, 7…
## $ int_density_rank     <dbl> 1, 3, 4, 3, 4, 3, 3, 1, 4, 4, 3, 5, 1, 4, 4, 4, 3…
## $ prox_transit_rank    <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ walkability_index    <dbl> 1.000000, 3.166667, 5.500000, 4.333333, 7.833333,…
## $ walkability_bins     <chr> "Least Walkable", "Least Walkable", "Least Walkab…
  • walkability_index: National Walkability Index score
  • walkability_bins: National Walkability Index Bins; 1-5.75 = Least Walkable, 5.76-10.5 = Below Average Walkable, 10.51-15.25 = Above Average Walkable, 15.26-20 = Most Walkable
  • intersection_density: Street intersection density (pedestrian-oriented intersections); Higher intersection density is correlated with more walk trips
  • int_density_rank: Resulting rank of block group for intersection_density within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • proximity_transit: Proximity to transit stops, measured in meters from population-weighted centroid of block group to nearest transit stop (areas with no transit stops are missing)
  • prox_transit_rank: Resulting rank of block group for prox_transit_rank within all block groups; range from 1-20,higher ranks indicate more walk trip likelihood (areas with no transit access are ranked the lowest)
  • employment_mix: The mix of employment types in a block group (such as retail, office, or industrial); higher values correlate with more walk trips
  • emp_mix_rank: Resulting rank of block group for employment_mix within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • emp_housing_mix: The mix of employment types and occupied housing; A block group with a diverse set of employment types (such as office, retail, and service) plus a large quantity of occupied housing units will have a relatively high value. Higher values correlate with more walk trips
  • emp_hou_mix_rank: Resulting rank of block group for emp_housing_mix within all block groups; range from 1-20, higher ranks indicate more walk trip likelihood
  • FIPS_TRACT: Combined Tract FIPS code (11 characters)
  • FIPS_BLKGP: Combined Block Group FIPS code (11 characters)
  • STATEFP: State FIPS code (2 characters)
  • COUNTYFP: County FIPS code (3 characters)
  • TRACTCE: TractFIPS code (6 characters)
  • BLKGRPCE: Block Group FIPS code (1 character)

Summaries

Five-number summaries of all variables:

walk %>% select(intersection_density:walkability_bins) %>% 
  as.data.frame() %>% 
  stargazer(., type = "text", title = "Summary Statistics", digits = 1,
            summary.stat = c("mean", "sd", "min", "median", "max"))
## 
## Summary Statistics
## =================================================
## Statistic            Mean St. Dev. Min Median Max
## -------------------------------------------------
## intersection_density 10.1   16.1    0   3.7   66 
## employment_mix       0.5    0.3     0   0.6    1 
## emp_housing_mix      0.5    0.2     0   0.5    1 
## emp_hou_mix_rank     10.5   6.0     1    11   20 
## emp_mix_rank         9.8    6.2     1    10   20 
## int_density_rank     4.1    2.4     1    3    11 
## prox_transit_rank    1.0    0.0     1    1     1 
## walkability_index    5.1    2.4     1   4.8   10 
## -------------------------------------------------

Visual Distributions

walk %>% 
  select(FIPS_BLKGP, walkability_index, intersection_density, proximity_transit, employment_mix, emp_housing_mix) %>% 
  pivot_longer(-FIPS_BLKGP, names_to = "measure", values_to = "value") %>% 
  ggplot(aes(x = value, fill = measure)) + 
  geom_histogram() + 
  facet_wrap(~measure, scales = "free")  +
  guides(fill = "none")

  • Note: The proximity to transit values for all Eastern Shore tracts and block groups was missing in the data source, meaning that the EPA’s National Walkability index does not recognize any public transportation stops in these areas from which to calculate distances.
meta %>% 
  filter(varname %in% c("walkability_index", "intersection_density",
                        "proximity_transit", "employment_mix", 
                        "emp_housing_mix")) %>%
  mutate(label = paste0(varname, ": ", description)) %>% 
  select(label) %>% 
  as.list()
## $label
## [1] "intersection_density: Street intersection density, measured in street intersections per acre. Higher intersection density is correlated with more walk trips (derived from 2018 HERE maps NAVSTREETS)"                                                                                                                                       
## [2] "proximity_transit: Proximity to transit stops, measured in meters from population-weighted centroid of block group to nearest transit stop. Distance from population center to nearest transit stop in meters. Shorter distances correlate with more walk trips (areas with no transit stops are missing; dervied from 2020 GTFS, 2020 COTD)"
## [3] "employment_mix: The mix of employment types in a block group (such as retail, office, or industrial). Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"                                                                                                                                                             
## [4] "emp_housing_mix: The mix of employment types and occupied housing. A block group with a diverse set of employment types (such as office, retail, and service) plus a large quantity of occupied housing units will have a relatively high value. Higher values correlate with more walk trips (derived from 2017 LEHD WAC)"                  
## [5] "walkability_index: Calculated by weighted formula using results of indicator rank scores."

Walkability by Locality

walk %>% 
  ggplot(aes(x = walkability_index, fill = COUNTYFP)) + 
  geom_histogram() + 
  facet_wrap(~COUNTYFP)  +
  guides(fill = "none")

Block Group Distributions

Walkability

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps$walkability_index)

leaflet(east_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps,
              fillColor = ~pal(walkability_index),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps$GEOID, "<br>",
                             "Walkability Index: ", round(east_maps$walkability_index, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps$walkability_index,
            title = "Walkability Index", opacity = 0.7)

Intersection Density

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps$intersection_density)

leaflet(east_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps,
              fillColor = ~pal(intersection_density),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps$GEOID, "<br>",
                             "Intersection Density: ", round(east_maps$intersection_density, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps$intersection_density,
            title = "Intersection Density", opacity = 0.7)

Employment Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps$employment_mix)

leaflet(east_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps,
              fillColor = ~pal(employment_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps$GEOID, "<br>",
                             "Employment Mix: ", round(east_maps$employment_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps$employment_mix,
            title = "Employment Mix", opacity = 0.7)

Employment-Housing Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps$emp_housing_mix)

leaflet(east_maps) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps,
              fillColor = ~pal(emp_housing_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps$GEOID, "<br>",
                             "Employment-Housing Mix: ", round(east_maps$emp_housing_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps$emp_housing_mix,
            title = "Employment-Housing Mix", opacity = 0.7)

Tract Distributions

  • Values shown here are based on averages of the block groups within each tract.

Walkability

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps2$avg_walkability_index)

leaflet(east_maps2) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps2,
              fillColor = ~pal(avg_walkability_index),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps2$GEOID, "<br>",
                             "Average Walkability Index: ", round(east_maps2$avg_walkability_index, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps2$avg_walkability_index,
            title = "Average <br> Walkability <br> Index", opacity = 0.7)

Intersection Density

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps2$avg_intersection_density)

leaflet(east_maps2) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps2,
              fillColor = ~pal(avg_intersection_density),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps2$GEOID, "<br>",
                             "Intersection Density: ", round(east_maps2$avg_intersection_density, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps2$avg_intersection_density,
            title = "Intersection Density", opacity = 0.7)

Employment Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps2$avg_employment_mix)

leaflet(east_maps2) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps2,
              fillColor = ~pal(avg_employment_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps2$GEOID, "<br>",
                             " Average Employment-Housing Mix: ", round(east_maps2$avg_employment_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps2$avg_employment_mix,
            title = "Average <br> Employment-Housing <br> Mix", opacity = 0.7)

Employment-Housing Mix

pal <- colorNumeric("plasma", reverse = TRUE, domain = east_maps2$avg_emp_housing_mix)

leaflet(east_maps2) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = east_maps2,
              fillColor = ~pal(avg_emp_housing_mix),
              weight = 1,
              opacity = 1,
              color = "white",
              fillOpacity = 0.6,
              highlight = highlightOptions(weight = 2, fillOpacity = 0.8, bringToFront = T),
              popup = paste0("Tract Number: ", east_maps2$GEOID, "<br>",
                             " Average Employment-Housing Mix: ", round(east_maps2$avg_emp_housing_mix, 2))) %>%
  addLegend("bottomright", pal = pal, values = east_maps2$avg_emp_housing_mix,
            title = "Average <br> Employment-Housing <br> Mix", opacity = 0.7)